LangChain v0.3 릴리즈 소식

출처: https://python.langchain.com/docs/versions/v0_3

최종 업데이트: 2024년 9월 16일

변경 사항

위 변경 사항이 유일한 호환성 변경 사항입니다.

새로운 기능

0.2.x 개발 중에 다음 기능이 추가되었습니다:

코드 업데이트 방법

langchain/langchain-community/langchain-core 0.0 또는 0.1을 사용 중이라면 먼저 0.2로 업그레이드하는 것이 좋습니다.

langgraph를 사용하는 경우 langgraph>=0.2.20,<0.3으로 업그레이드하세요. 이렇게 하면 모든 기본 패키지의 0.2 또는 0.3 버전에서 작동합니다.

다음은 릴리스된 모든 패키지의 전체 목록과 버전 제약 조건 업그레이드를 권장하는 패키지입니다. 이제 langchain-core 0.3이 필요한 모든 패키지의 마이너 버전이 증가했습니다. 이제 langchain-core 0.2 및 0.3과 호환되는 모든 패키지의 패치 버전이 증가했습니다.

더 이상 사용되지 않는 임포트를 자동으로 업데이트하려면 langchain-cli를 사용하면 됩니다. CLI는 LangChain 0.0.x 및 LangChain 0.1에서 도입된 더 이상 사용되지 않는 임포트 업데이트와 langchain_core.pydantic_v1 및 langchain.pydantic_v1 임포트 업데이트를 처리합니다.

기본(Base) 패키지

Package Latest Recommended constraint
langchain 0.3.0 >=0.3,<0.4
langchain-community 0.3.0 >=0.3,<0.4
langchain-text-splitters 0.3.0 >=0.3,<0.4
langchain-core 0.3.0 >=0.3,<0.4
langchain-experimental 0.3.0 >=0.3,<0.4

다운스트림(Downstream) 패키지

Package Latest Recommended constraint
langgraph 0.2.20 >=0.2.20,<0.3
langserve 0.3.0 >=0.3,<0.4

통합(Integration) 패키지

최신 버전의 패키지로 업데이트한 후에는 Pydantic v1에서 Pydantic v2로의 내부 전환으로 인해 발생하는 다음과 같은 문제를 해결해야 할 수 있습니다.

Package Latest Recommended constraint
langchain-ai21 0.2.0 >=0.2,<0.3
langchain-aws 0.2.0 >=0.2,<0.3
langchain-anthropic 0.2.0 >=0.2,<0.3
langchain-astradb 0.4.1 >=0.4.1,<0.5
langchain-azure-dynamic-sessions 0.2.0 >=0.2,<0.3
langchain-box 0.2.0 >=0.2,<0.3
langchain-chroma 0.1.4 >=0.1.4,<0.2
langchain-cohere 0.3.0 >=0.3,<0.4
langchain-elasticsearch 0.3.0 >=0.3,<0.4
langchain-exa 0.2.0 >=0.2,<0.3
langchain-fireworks 0.2.0 >=0.2,<0.3
langchain-groq 0.2.0 >=0.2,<0.3
langchain-google-community 2.0.0 >=2,<3
langchain-google-genai 2.0.0 >=2,<3
langchain-google-vertexai 2.0.0 >=2,<3
langchain-huggingface 0.1.0 >=0.1,<0.2
langchain-ibm 0.2.0 >=0.2,<0.3
langchain-milvus 0.1.6 >=0.1.6,<0.2
langchain-mistralai 0.2.0 >=0.2,<0.3
langchain-mongodb 0.2.0 >=0.2,<0.3
langchain-nomic 0.1.3 >=0.1.3,<0.2
langchain-ollama 0.2.0 >=0.2,<0.3
langchain-openai 0.2.0 >=0.2,<0.3
langchain-pinecone 0.2.0 >=0.2,<0.3
langchain-postgres 0.0.13 >=0.0.13,<0.1
langchain-prompty 0.1.0 >=0.1,<0.2
langchain-qdrant 0.1.4 >=0.1.4,<0.2
langchain-redis 0.1.0 >=0.1,<0.2
langchain-sema4 0.2.0 >=0.2,<0.3
langchain-together 0.2.0 >=0.2,<0.3
langchain-unstructured 0.1.4 >=0.1.4,<0.2
langchain-upstage 0.3.0 >=0.3,<0.4
langchain-voyageai 0.2.0 >=0.2,<0.3
langchain-weaviate 0.0.3 >=0.0.3,<0.1
최신 버전의 패키지로 업데이트한 후에는 Pydantic v1에서 Pydantic v2로 내부 전환으로 인해 발생하는 다음 문제를 해결해야 할 수 있습니다:

Pydantic 2로 전환할 때 발생하는 일반적인 문제

1. langchain_core.pydantic_v1 네임스페이스를 사용하지 마세요

langchain_core.pydantic_v1 또는 langchain.pydantic_v1를 모두 pydantic 임포트로 대체합니다.

예를 들어,

from langchain_core.pydantic_v1 import BaseModel

다음으로 변경:

from pydantic import BaseModel

Pydantic 2에는 여러 가지 호환성 변경 사항이 있으므로 Pydantic 코드를 추가로 업데이트해야 할 수도 있습니다. Pydantic 1에서 2로 코드를 업그레이드하는 방법은 Pydantic 마이그레이션을 참조하세요.

2. Pydantic 객체를 LangChain API에 전달하기

다음 API를 사용하는 사용자:

위 API를 호출하는 경우 Pydantic 1 객체(pydantic 2의 pydantic.v1 네임스페이스를 통해 생성됨)가 아닌 Pydantic 2 객체를 API에 전달하도록 해야 합니다.

주의: 이러한 API 중 일부에서는 v1 객체를 허용할 수 있지만, 향후 문제를 방지하기 위해 사용자는 Pydantic 2 객체를 사용하는 것이 좋습니다.

3. LangChain 모델 서브클래싱하기

기존 LangChain 모델(예: BaseTool, BaseChatModel, LLM)의 모든 서브클래싱(sub-classing)은 Pydantic 2 기능을 사용하도록 업그레이드해야 합니다.

예를 들어, Pydantic 1 기능(예: validator)에 의존하는 모든 사용자 코드는 Pydantic 2에 해당하는 기능(예: field_validator)으로 업데이트해야 하며, pydantic.v1, langchain_core.pydantic_v1, langchain.pydantic_v1 참조는 pydantic에서 가져오는 것으로 대체되어야 합니다.

# pydantic 2가 설치된 경우
from pydantic.v1 import validator, Field 

# pydantic 1가 설치된 경우
# from pydantic import validator, Field
# from langchain_core.pydantic_v1 import validator, Field
# from langchain.pydantic_v1 import validator, Field

class CustomTool(BaseTool): # BaseTool은 v1 코드
    x: int = Field(default=1)

    def _run(*args, **kwargs):
        return "hello"

    @validator('x') # v1 코드
    @classmethod
    def validate_x(cls, x: int) -> int:
        return 1

다음으로 변경:

from pydantic import Field, field_validator # pydantic v2
from langchain_core.pydantic_v1 import BaseTool

class CustomTool(BaseTool): # BaseTool은 v1 코드
    x: int = Field(default=1)

    def _run(*args, **kwargs):
        return "hello"

    @field_validator('x') # v2 코드
    @classmethod
    def validate_x(cls, x: int) -> int:
        return 1


CustomTool(
    name='custom_tool',
    description="hello",
    x=1,
)

4. model_rebuild()

LangChain 모델에서 서브클래싱(sub-classing)할 때, 사용자는 파일에 관련 임포트를 추가하고 모델을 다시 빌드해야 할 수 있습니다.

model_rebuild에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

from langchain_core.output_parsers import BaseOutputParser


class FooParser(BaseOutputParser):
    ...

새로운 코드:

from typing import Optional as Optional

from langchain_core.output_parsers import BaseOutputParser

class FooParser(BaseOutputParser):
    ...

FooParser.model_rebuild()

langchain-cli를 사용하여 마이그레이션

langchain-cli는 코드에서 더 이상 사용되지 않는 LangChain 임포트를 자동으로 업데이트하는 데 도움이 될 수 있습니다.

langchain-cli는 더 이상 사용되지 않는 LangChain 임포트만 처리하며, 코드를 pydantic 1에서 pydantic 2로 업그레이드하는 데는 도움이 되지 않는다는 점에 유의하세요.

Pydantic 1에서 2로의 마이그레이션 자체에 대한 도움말은 Pydantic 마이그레이션 가이드라인을 참고하시기 바랍니다.

0.0.31 버전부터 langchain-cli는 코드 모드 적용을 위해 gritql에 의존합니다.

설치하기

pip install -U langchain-cli
langchain-cli --version # <-- 버전이 0.0.31 이상인지 확인하세요.

사용법

마이그레이션 스크립트가 완벽하지 않으므로 먼저 코드의 백업이 있는지 확인해야 합니다(예: git과 같은 버전 관리 도구를 사용).

langchain-cli는 LangChain 0.3에서 도입된 langchain_core.pydantic_v1 지원 중단과 이전 지원 중단을 처리합니다(예: from langchain.chat_models import ChatOpenAIfrom langchain_openai import ChatOpenAI가 되어야 함),

마이그레이션 스크립트는 실행당 한 번만 임포트 교체를 적용하므로 두 번 실행해야 합니다.

예를 들어, 코드가 여전히 이전 임포트 from langchain.chat_models import ChatOpenAI를 사용하고 있다고 가정해 보겠습니다:

첫 번째 실행 후에는 다음과 같이 됩니다: from langchain_community.chat_models import ChatOpenAI 두 번째 실행 후에는 다음과 같이 표시됩니다: from langchain_openai import ChatOpenAI가 표시됩니다.

# 처음 실행할 때
# from langchain.chat_models import ChatOpenAI를 대체합니다.
langchain-cli migrate --help [path to code] # 도움말
langchain-cli migrate [path to code] # 적용

# 임포트 교체를 더 적용하려면 두 번째로 실행하세요.
langchain-cli migrate --diff [path to code] # 미리 보기
langchain-cli migrate [path to code] # 적용

기타 옵션

# 도움말 메뉴 보기
langchain-cli migrate --help
# 적용하지 않고 변경 사항 미리 보기
langchain-cli migrate --diff [path to code]
# 대화형으로 변경 사항 승인
langchain-cli migrate --interactive [path to code]